#include <iostream>
#include <string>

using namespace std;

// 提前声明 函数  和  类   类外实现友元的方法
template<typename T>
class My_class;

template<typename T>
void func_2(My_class<T> & s);

template<typename T>
class My_class
{
private:
    T val;
public:
    My_class(T val) : val(val) {}
    
    // 友元函数 类内实现
    friend void func_1(My_class<T> & s)
    {
        cout << "我是友元 " << s.val << endl;
    }

    // 友元函数 类外实现   注意 需要添加 空模板 <>
    friend void func_2<>(My_class<T> & s);
};

template<typename T>
void func_2(My_class<T> & s)
{
    cout << "我是友元 " << s.val << endl;
}



int main(int argc, char const *argv[])
{
    My_class<string> s("张三");

    func_2(s);
    
    return 0;
}
